/* 
函数重载: 函数名相同, 而形参不同的多个函数
*/
/* 
需求: 我们有一个add函数，它可以接收2个string类型的参数进行拼接，
     也可以接收2个number类型的参数进行相加 
*/

(() => {

  // 重载函数声明: 2个同名函数, 参数或返回值类型不同
  function add (x: string, y: string): string
  function add (x: number, y: number): number

  function add(x, y) {
    if (typeof x==='string' && typeof y==='string') {
      return x + y
    } else if (typeof x==='number' && typeof y==='number') {
      return x + y
    }
  }

  console.log(add(2, 3)) // 5
  console.log(add('ab', 'cd')) // abcd
  // console.log(add('ab', 2)) // 应该直接报错   undefined

})()